//Declaración de variables de la brújula
CompassManager brujula;

PVector ultimo=new PVector(0,0);
PVector destino=new PVector(0,0);
float direccion=0.0;
int longitudPato=30;
int anchoPato=20;
int cantPatos=10;
Pato[] patos;

void setup(){
  size(displayWidth,displayHeight);
  //size(400,500);
  
  //Creación del objeto brújula
  brujula = new CompassManager(this);
  
  patos=new Pato[cantPatos];
  for(int i=0;i<cantPatos;i++){
    patos[i]=new Pato(new PVector(random(0,width),random(0,height)),anchoPato,longitudPato);
  }
}

void draw(){
  background(0);
  calcularDestino();
  for(int i=0;i<cantPatos;i++){
    patos[i].destino=destinoCercano(destino);
    patos[i].draw(direccion);
  }
}

// ****************** EVENTOS ****************** //
//Callbacks del sensor
void resume() {
  if (brujula != null) brujula.resume();
}
//Captura la dirección de la brújula
void directionEvent(float newDirection) {
  direccion = newDirection;
}

// ****************** OTROS MÉTODOS ****************** //
//Calcula el destino máximo al que pueden llegar los patos
void calcularDestino(){
  PVector minimo=new PVector(0,0);
  PVector maximo=new PVector(width,height);
  float maxDist=PVector.dist(minimo,maximo);
  destino.x=maxDist*cos(direccion);
  destino.y=maxDist*sin(direccion);
  if(destino.x<0){
    destino.x=0+10;
  }
  if(destino.x>width){
    destino.x=width-10;
  }
  if(destino.y<0){
    destino.y=0+10;
  }
  if(destino.y>height){
    destino.y=height-10;
  }
}
//Calcula un vector aleatorio cercano al destino
PVector destinoCercano(PVector destino){
  float newX=destino.x+(random(-350,350));
  float newY=destino.y+(random(-350,350));
  PVector newvector=new PVector(newX,newY);
  return newvector;
}
